package ru.pb.game.network.engine.client.packets.sendable;

import ru.pb.game.network.engine.client.packets.GameServerToClientPacket;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.players.enums.SLOT_STATE;
import ru.pb.game.objects.model.room.Room;

/**
 * @author Felixx
 */
public class PROTOCOL_ROOM_HOST_CHANGE_TEAM_ACK extends GameServerToClientPacket
{
	private Player _p;
	private Room _r;

	public PROTOCOL_ROOM_HOST_CHANGE_TEAM_ACK(Player p)
	{
		_p = p;
		_r = p.getRoom();
	}

	@Override
	public void writeImpl()
	{
		writeH(3625);
		// Для вывода сообщения что лидер сменил местами команы, надо 2.
		// Для сообщения "Исходя из настроек баланса, было установлено одинаковое кол-во бойцов"
		// TODO сравнить с оффом как ето число получать.
		writeC(2);
		writeC(_p.getSlot() % 2 == 0 ? _p.getSlot() + 1 : _p.getSlot() - 1); // Новый слот ХОСТА.
		writeC(8); // Сколько человек.

		int[] rslots = new int[] {0, 2, 4, 6, 8, 10, 12, 14};
		for(int i = 0; i < 8; i++)
		{
			int index = rslots[i];
			writeC(index); // Номер старого слота.
			writeC(index + 1); // Номер нового слота.

			Player rm = _r.getPlayerBySlot(index);
			Player bm = _r.getPlayerBySlot(index + 1);

			writeC(bm != null ? _r.getSlotState(bm.getSlot()) : SLOT_STATE.SLOT_STATE_EMPTY); // Установить флаг в красном слоте.
			writeC(rm != null ? _r.getSlotState(rm.getSlot()) : SLOT_STATE.SLOT_STATE_EMPTY); // Установить флаг в синем слоте.

			if(rm != null)
				rm.setSlot(index + 1);
			if(bm != null)
				bm.setSlot(index);
		}
	}
}